package com.doctor.windflower_doctor.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;

import com.doctor.windflower_doctor.R;

/**
 * <p>
 * 功能 二次封装自定义listview（下拉刷新，滑动底部自动加载）
 * </p>
 * 
 * <p>
 * Copyright 掌动乾坤公司 2014 All right reserved.
 * </p>
 * 
 * @author 曾昭亮 时间 2014-3-18 上午10:43:47
 * @version 1.0 </br> 最后修改人 无
 * 
 */
public class PullToCustomListView extends PullToRefreshListView {

	private boolean isLoading = false;
	private boolean isEnd = false;
	private View footerView;
	private LinearLayout layoutFooter;

	public PullToCustomListView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		initView(context);
	}

	public PullToCustomListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		initView(context);
	}

	public PullToCustomListView(Context context, int res) {
		super(context, res);
		// TODO Auto-generated constructor stub
		initView(context);
	}

	private void initView(Context context) {
		footerView = LayoutInflater.from(context).inflate(R.layout.list_footer, null);
		layoutFooter = (LinearLayout) footerView.findViewById(R.id.layoutFooter);
		layoutFooter.setVisibility(View.GONE);
		if (getRefreshableView().getFooterViewsCount() <= 0)
			getRefreshableView().addFooterView(footerView);
	}

	/**
	 * <p>
	 * 功能 下拉刷新监听事件
	 * </p>
	 * 
	 * @author 曾昭亮 时间 2014-3-18 下午12:02:09
	 * @param listener
	 */
	public void setOnRefreshDownListener(final OnRefreshDownListener listener) {
		setOnRefreshListener(new OnRefreshListener() {
			@Override
			public void onRefresh() {
				// TODO Auto-generated method stub
				if (!isLoading) {
					isLoading = true;
					isEnd = false;
					listener.onRefresh();
					if (getRefreshableView().getFooterViewsCount() <= 0)
						getRefreshableView().addFooterView(footerView);
				} else {
					onRefreshDownComplete();
				}
			}
		});
	}

	/**
	 * <p>
	 * 功能 滑动底部自动加载事件
	 * </p>
	 * 
	 * @author 曾昭亮 时间 2014-3-18 下午12:02:25
	 * @param listener
	 */
	public void setOnAutoLoadBottomListener(final OnAutoLoadBottomListener listener) {
		getRefreshableView().setOnScrollListener(new OnScrollListener() {
			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {

			}

			@Override
			public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
				if (!isLoading && !isEnd && firstVisibleItem + visibleItemCount == totalItemCount && firstVisibleItem > 0) {
					isLoading = true;
					layoutFooter.setVisibility(View.VISIBLE);
					listener.onBottomLoad();
				}
			}
		});
	}

	public void setAdapter(ListAdapter adapter) {
		if (adapter.getCount() <= 0 && getRefreshableView().getFooterViewsCount() > 0) {
			ListView listview = getRefreshableView();
			if (footerView == null)
				return;
			listview.removeFooterView(footerView);
		}
		getRefreshableView().setAdapter(adapter);
	}

	public void onItemClickListener(OnItemClickListener listener) {
		getRefreshableView().setOnItemClickListener(listener);
	}

	/**
	 * <p>
	 * 功能 下拉刷新完成后调用
	 * </p>
	 * 
	 * @author 曾昭亮 时间 2014-3-18 上午10:59:53
	 */
	public void onRefreshDownComplete() {
		isLoading = false;
		isEnd = false;
		onRefreshComplete();
		if (getRefreshableView().getAdapter().getCount() <= 0 && getRefreshableView().getFooterViewsCount() > 0)
			getRefreshableView().removeFooterView(footerView);
	}

	/**
	 * <p>
	 * 功能 底部加载完成后调用
	 * </p>
	 * 
	 * @author 曾昭亮 时间 2014-3-18 上午10:58:43
	 */
	public void onLoadBottomComplete() {
		isLoading = false;
		layoutFooter.setVisibility(View.GONE);
	}

	/**
	 * <p>
	 * 功能 底部加载结束后调用
	 * </p>
	 * 
	 * @author 曾昭亮 时间 2014-3-18 上午11:57:08
	 */
	public void onLoadBottomEnd() {
		isEnd = true;
		if (getRefreshableView().getFooterViewsCount() > 0)
			getRefreshableView().removeFooterView(footerView);
	}

	public interface OnRefreshDownListener {
		public void onRefresh();
	}

	public interface OnAutoLoadBottomListener {
		public void onBottomLoad();
	}
}
